package com.silences.dao;

import com.silences.pojo.Goods;
import com.silences.pojo.User;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class GoodsDao {

    //添加商品
    public void addGoods(Goods u) throws SQLException, ClassNotFoundException {//throws SQLException 抛出异常

        //mysql 8.0
        //String url="jdbc:mysql://localhost:3306/db_student?characterEncoding=utf-8"+
        // "&serverTimezone=Asia/Shanghai&useUnicode=true&useSSL="false";


        //1 获取数据库连接
        // 加载驱动器
        Class.forName("com.mysql.jdbc.Driver");//5.0版本
        // Class.forName("com.mysql.cj.jdbc.Driver");//8.0版本
        //mysql 5.0 版本
        String url="jdbc:mysql://localhost:3306/db_student?characterEncoding=utf-8"; //localhost 是数据库的主机名和Ip地址 3306是MySQL的默认端口号 后面是要连接的数据库名称 ?characterEncoding=utf-8是一个用于设置数据库连接字符集编码的参数
        String user="root";//账号
        String password="123456";//密码
        Connection conn= DriverManager.getConnection(url,user,password);

        //1 编辑sql语句
        String sql="insert into goods values (null,?,?,?,?,?)";
        //2 使用preparement 执行sql语句
        PreparedStatement ps=conn.prepareStatement(sql);
        //3 设置参数，替换我们的问号
        ps.setString(1, u.getGoodsname());
        ps.setString(2,u.getGoodsprice());
        ps.setString(3,u.getGoodstype());
        ps.setString(4,u.getAvatar());
        //util 形式的日期 转为sql 形式日期， getTime（）获取毫秒数
        ps.setDate(5,new java.sql.Date(u.getCreatedate().getTime()));
        //4 执行
        ps.executeLargeUpdate();// ps.executeLargeUpdate()执行添加，删除和修改
        //5 关闭资源
        conn.close();
        ps.close();
    }


    //查询商品列表
    public List<Goods> getGoods(String searchname,String pageIndex, String pageSize) throws SQLException, ClassNotFoundException {//throws SQLException 抛出异常


        //mysql 8.0
        //String url="jdbc:mysql://localhost:3306/db_student?characterEncoding=utf-8"+
        // "&serverTimezone=Asia/Shanghai&useUnicode=true&useSSL="false";


        //1 获取数据库连接
        // 加载驱动器
        Class.forName("com.mysql.jdbc.Driver");//5.0版本
        // Class.forName("com.mysql.cj.jdbc.Driver");//8.0版本
        //mysql 5.0 版本
        String url="jdbc:mysql://localhost:3306/db_student?characterEncoding=utf-8"; //localhost 是数据库的主机名和Ip地址 3306是MySQL的默认端口号 后面是要连接的数据库名称 ?characterEncoding=utf-8是一个用于设置数据库连接字符集编码的参数
        String user="root";//账号
        String password="123456";//密码
        Connection conn= DriverManager.getConnection(url,user,password);

        //1 编辑sql语句
        //String sql="select *from user ";
        //分页sql
        String sql="select * from goods limit ?,?";
        if(searchname !=null && searchname !="") {
            sql="select *from goods where goodsname=? limit ?,?";
        }
        //2 使用prepareStatement 执行sql语句
        PreparedStatement ps =conn.prepareStatement(sql);
        //3  设置参数，替代问号，没有问号可以省略
        int pi=Integer.parseInt(pageIndex);
        int size=Integer.parseInt(pageSize);
        if(searchname !=null && searchname !=""){
            ps.setString(1,searchname);
            ps.setInt(2,(pi-1)*size);
            ps.setInt(3,size);
        }else
        {
            ps.setInt(1,(pi-1)*size);
            ps.setInt(2,size);
        }

        //2 使用preparement 执行sql语句
        //PreparedStatement ps =conn.prepareStatement(sql);
        //3 设置参数，替换我们的问号

        //4 执行  会返回一个结果集
        ResultSet rs=ps.executeQuery();
        // 5 处理结果集
        List<Goods> list=new ArrayList<Goods>(); // 创建list集合 ， 装用户对象
        while(rs.next())
        {
            Goods u =new Goods();// 导包操作 import class
            u.setGoodsnum(rs.getInt(1));
            u.setGoodsname(rs.getString(2));
            u.setGoodsprice(rs.getString(3));
            u.setGoodstype(rs.getString(4));
            u.setAvatar(rs.getString(5));
            u.setCreatedate(rs.getDate(6));
            list.add(u);//把用户对象添加到list集合里面
        }
        //6 关闭资源
        conn.close();
        ps.close();
        rs.close();
        return list;
    }



    //根据单个id
    //查询商品列表
    public Goods getGoodsById(int id) throws SQLException, ClassNotFoundException {//throws SQLException 抛出异常

        //mysql 8.0
        //String url="jdbc:mysql://localhost:3306/db_student?characterEncoding=utf-8"+
        // "&serverTimezone=Asia/Shanghai&useUnicode=true&useSSL="false";


        //1 获取数据库连接
        // 加载驱动器
        Class.forName("com.mysql.jdbc.Driver");//5.0版本
        // Class.forName("com.mysql.cj.jdbc.Driver");//8.0版本
        //mysql 5.0 版本
        String url="jdbc:mysql://localhost:3306/db_student?characterEncoding=utf-8"; //localhost 是数据库的主机名和Ip地址 3306是MySQL的默认端口号 后面是要连接的数据库名称 ?characterEncoding=utf-8是一个用于设置数据库连接字符集编码的参数
        String user="root";//账号
        String password="123456";//密码
        Connection conn= DriverManager.getConnection(url,user,password);

        //1 编辑sql语句
        String sql="select *from goods where goodsnum=?";
        //2 使用preparement 执行sql语句
        PreparedStatement ps=conn.prepareStatement(sql);
        //3 设置参数，替换我们的问号
        ps.setInt(1,id);
        //4 执行  会返回一个结果集
        ResultSet rs=ps.executeQuery();
        // 5 处理结果集
        // List<User> list=new ArrayList<User>(); // 创建list集合 ， 装用户对象

        Goods u =new Goods();
        while(rs.next())
        {
            //User u =new User();// 导包操作 import class
            u.setGoodsnum(rs.getInt(1));
            u.setGoodsname(rs.getString(2));
            u.setGoodsprice(rs.getString(3));
            u.setGoodstype(rs.getString(4));
            u.setAvatar(rs.getString(5));
            u.setCreatedate(rs.getDate(6));
            //list.add(u);//把用户对象添加到list集合里面
        }
        //6 关闭资源
        conn.close();
        ps.close();
        rs.close();
        return u;
    }


    //总条数的查询
    //查询商品列表
    public int countGoods(String searchname) throws SQLException, ClassNotFoundException {//throws SQLException 抛出异常

        //mysql 8.0
        //String url="jdbc:mysql://localhost:3306/db_student?characterEncoding=utf-8"+
        // "&serverTimezone=Asia/Shanghai&useUnicode=true&useSSL="false";


        //1 获取数据库连接
        // 加载驱动器
        Class.forName("com.mysql.jdbc.Driver");//5.0版本
        // Class.forName("com.mysql.cj.jdbc.Driver");//8.0版本
        //mysql 5.0 版本
        String url="jdbc:mysql://localhost:3306/db_student?characterEncoding=utf-8"; //localhost 是数据库的主机名和Ip地址 3306是MySQL的默认端口号 后面是要连接的数据库名称 ?characterEncoding=utf-8是一个用于设置数据库连接字符集编码的参数
        String user="root";//账号
        String password="123456";//密码
        Connection conn= DriverManager.getConnection(url,user,password);

        //1 编辑sql语句
        //String sql="select *from user ";
        //分页sql
        String sql="select count(*) from goods ";
        if(searchname !=null && searchname !="") {
            sql="select count(*) from goods where goodsname= ? ";
        }
        //2 使用prepareStatement 执行sql语句
        PreparedStatement ps =conn.prepareStatement(sql);
        //3  设置参数，替代问号，没有问号可以省略
        if(searchname !=null && searchname !=""){
            ps.setString(1,searchname);

        }
        //4 执行  会返回一个结果集
        ResultSet rs=ps.executeQuery();
        // 5 处理结果集
        int count=0;
        while(rs.next())
        {
            count =rs.getInt(1);
        }
        //6 关闭资源
        conn.close();
        ps.close();
        rs.close();
        return count;
    }



    //修改商品列表
    public void updateGoods(Goods u) throws SQLException, ClassNotFoundException {//throws SQLException 抛出异常

        //mysql 8.0
        //String url="jdbc:mysql://localhost:3306/db_student?characterEncoding=utf-8"+
        // "&serverTimezone=Asia/Shanghai&useUnicode=true&useSSL="false";


        //1 获取数据库连接
        // 加载驱动器
        Class.forName("com.mysql.jdbc.Driver");//5.0版本
        // Class.forName("com.mysql.cj.jdbc.Driver");//8.0版本
        //mysql 5.0 版本
        String url="jdbc:mysql://localhost:3306/db_student?characterEncoding=utf-8"; //localhost 是数据库的主机名和Ip地址 3306是MySQL的默认端口号 后面是要连接的数据库名称 ?characterEncoding=utf-8是一个用于设置数据库连接字符集编码的参数
        String user="root";//账号
        String password="123456";//密码
        Connection conn= DriverManager.getConnection(url,user,password);//DriverManager 是 Java 中用于管理 JDBC 驱动程序的类负责加载驱动程序、建立数据库连接并提供对数据库的访问

        //1 编辑sql语句
        String sql="update goods set goodsname=?,goodsprice=? , goodstype=? , avatar=? , createdate=? where goodsnum=? ";
        //2 使用preparement 执行sql语句
        PreparedStatement ps=conn.prepareStatement(sql);
        //3 设置参数，替换我们的问号
        ps.setString(1,u.getGoodsname());
        ps.setString(2,u.getGoodsprice());
        ps.setString(3,u.getGoodstype());
        ps.setString(4,u.getAvatar());
        ps.setDate(5,new java.sql.Date(u.getCreatedate().getTime()));
        ps.setInt(6,u.getGoodsnum());
        //4 执行
        ps.executeUpdate();// ps.executeLargeUpdate()执行添加，删除和修改
        //5 关闭资源
        conn.close();
        ps.close();
    }

    //删除商品
    public void deleteGoods(int id) throws SQLException, ClassNotFoundException {//throws SQLException 抛出异常

        //mysql 8.0
        //String url="jdbc:mysql://localhost:3306/db_student?characterEncoding=utf-8"+
        // "&serverTimezone=Asia/Shanghai&useUnicode=true&useSSL="false";


        //1 获取数据库连接
        // 加载驱动器
        Class.forName("com.mysql.jdbc.Driver");//5.0版本
        // Class.forName("com.mysql.cj.jdbc.Driver");//8.0版本
        //mysql 5.0 版本
        String url="jdbc:mysql://localhost:3306/db_student?characterEncoding=utf-8"; //localhost 是数据库的主机名和Ip地址 3306是MySQL的默认端口号 后面是要连接的数据库名称 ?characterEncoding=utf-8是一个用于设置数据库连接字符集编码的参数
        String user="root";//账号
        String password="123456";//密码
        Connection conn= DriverManager.getConnection(url,user,password);

        //1 编辑sql语句
        String sql="delete from goods where goodsnum=? ";
        //2 使用preparement 执行sql语句
        PreparedStatement ps=conn.prepareStatement(sql);
        //3 设置参数，替换我们的问号
        ps.setInt(1,id);

        //4 执行
        ps.executeLargeUpdate();// ps.executeLargeUpdate()执行添加，删除和修改
        //5 关闭资源
        conn.close();
        ps.close();
    }



    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        /*GoodsDao g= new GoodsDao();
        //添加 u.addUser();
        //方法调用 变量名.方法名
        //g.addGoods(); 添加商品

        //g.updateGoods(); //更新第一行的数据为华为手机

        //g.deleteGoods(); //删除第一行的数据

        List<Goods> goods= g.getGoods();
        for(Goods good : goods)
            System.out.println(good.getGoodsnum()+"=="+good.getGoodsname()+"=="+good.getGoodsprice()+"=="+good.getGoodstype());*/

    }

}
